var sessions = {}; // {SESSID: {SESSID: id, expires: dt}}

var start = function (req, res) {
    var cookies = {};
    if (typeof req.headers.cookie !== 'undefined') { // 判断是否存在cookie;
        req.headers.cookie.split(';').forEach(function (cookie) {
            var parts = cookie.split('=');
            cookies[parts[0].trim()] = (parts[1] || '').trim();
        });
    } else {
        cookies.SESSID = 0;
    }
    var SESSID = cookies.SESSID;
    if (typeof sessions[SESSID] !== 'undefined') { // 判断是否存在session
        var session = sessions[SESSID];
        if (session.expires < Date()) { // session过期 -> 重新生成
            sessions[SESSID] = null;
            return newSession(res);
        } else {
            var dt = new Date();
            dt.setMinutes(dt.getMinutes() + 30);

            session.expires = dt;
            return sessions[SESSID];
        }
    } else {
        return newSession(res);
    }
};

// 主要思路就是通过req对象的headers获取cookie，并对cookie进行解析获取SessionId，判断是否存在该SessionId值，从而返回或生成新Session；

function newSession(res) {
    var chars = "";
    var SESSID = '';
    for (var i = 0; i < 40; i++) {
        var rnum = Math.floor(Math.random() * chars.length);
        SESSID += chars[rnum]; // chars.substring(rnum, rnum + 1);
    }
    if (typeof sessions[SESSID] !== 'undefined') {
        return newSession(res);
    }
    var dt = new Date();
    dt.setMinutes(dt.getMinutes() + 30);
    var session = {
        SESSID: SESSID,
        expires: dt
    };
    sessions[SESSID] = session;
    res.setHeader('Set-Cookie', 'SESSID=' + SESSID);
    return session;
}

function clearSessions() {
    for (sess in sessions) {
        if (sess.expires < Date()) {
            // delete
        }
    }
}


// 3.4.3
